package ar.com.binarit.entities

class Usuario {
	
	String username
	String mail
	String nickname
	String password
	
	TipoUsuario tipoUsuario
	String imgAvatar
	
	int valorRanking
	
	List tagsUtilizados
	
	static hasMany = [
		mubbiasCreadas : Mubbia, mubbiasFavoritas : Mubbia, mubbiasParticipando : Mubbia
	]
	
	static mappedBy = [mubbiasCreadas : "usuarioCreador", mubbiasFavoritas:"usuariosFavoritos", mubbiasParticipando:"usuariosParticipantes"]
	
    static constraints = {
		username(size:1..100, unique: true)
		password(size:5..20, nullable: true)
		mail(size:1..100, email: true, unique: true)
		tipoUsuario(nullable: false)
		nickname(size:1..100)
		mubbiasFavoritas(nullable: true)
		mubbiasParticipando(nullable: true)
		tagsUtilizados(nullable: true)
    }
	
	static mapping = {
		password column: '`password`'
//		usuariosFavoritos lazy: false  //No estoy seguro en este caso
//		mubbiasDestacadas lazy: false
//		mubbiasFavoritas lazy: false
//		mubbiasEnVista lazy: false
	}
	
	public Mubbia(){
		tagsUtilizados = new ArrayList()
		tipoUsuario = TipoUsuario.normal()
	}
	
	String toString(){
		"${username} - ${nickname}"
	}
	
	def traerDatosRelacionados() {
		tipoUsuario?.descripcion
	}
	
	def unirse(mubbia){
		this.addToMubbiasParticipando(mubbia)
	}
	
	def desunirse(mubbia){
		this.removeFromMubbiasParticipando(mubbia)
	}
	
	public boolean equals(Object otro) {
		try {
			return username?.equalsIgnoreCase(otro?.username)
		} catch (ClassCastException e) {
			return false
		}
	}
	
	public int hashCode() {
		return username.hashCode()
	}
	
}
